import java.util.Locale;

public class Text {


    /**
     * 1658. 将 x 减到 0 的最小操作数
     * 给你一个整数数组 nums 和一个整数 x 。每一次操作时，你应当移除数组 nums 最左边或最右边的元素，
     * 然后从 x 中减去该元素的值。请注意，需要 修改 数组以供接下来的操作使用。
     * @param nums
     * @param x 目标数
     * @return
     */
    public int minOperations1(int[] nums, int x) {
        int sum1 = 0;
        for (int i = 0; i < nums.length; i++) {
            sum1 += nums[i];
        }
        int targent = sum1- x;
        if(targent < 0) return -1;

        int len = -1;
        int left = 0, right = 0;
        int sum = 0;
        while (right < nums.length){
            sum += nums[right];
            while (sum > targent){
                sum -= nums[left++];
            }
            if(sum == targent){
                len = Math.max(len,right - left + 1);
            }
            right++;
        }
        if(sum1 - sum == targent){
            return len;
        }
        return nums.length - len;
    }

    public int minOperations(int[] nums, int x) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        int targent = sum - x;
        int len = 0;
        int left = 0, right = 0;
        for (; right < nums.length ; left++) {
            if(sumInterval(nums,left,right) < targent ){
                right++;
            }
            while (sumInterval(nums,left,right) > targent){
                left++;
            }
            len = Math.max(len , right - left + 1);
        }
        if(sum - sumInterval(nums,left,right) == x ){
            return nums.length - len;
        }
        return len;
    }

    public int sumInterval(int[] array,int left,int right){
        int sum = 0;
        for (; left <= right; left++) {
            sum += array[left];
        }
        return sum;
    }

    /**
     * 最大连续为1的个数
     * 给定一个二进制数组 nums 和一个整数 k，假设最多可以翻转 k 个 0 ，则返回执行操作后 数组中连续 1 的最大个数 。
     * @param nums
     * @param k 能改为1的0的个数
     * @return
     */
    public int longestOnes(int[] nums, int k) {
        int count = k;
        int len = 0;
        int left = 0;
        int right = 0;
        while (right < nums.length){
            if(nums[right] == 0){
                count--;
            }
            while(count < 0){
                left++;
                if(nums[left] == 0){
                    count++;
                }
            }
            len = Math.max(len, right - left);
            right++;
        }
        return len;
    }

    public static void main(String[] args) {
        
    }
}











